iT邦幫忙

2024 iThome 鐵人賽

DAY 13
1
自我挑戰組

學習網頁開發系列 第 13

利用 Django Channels 讓 Django 兼容 Websockets 第一篇

  • 分享至 

  • xImage
  •  

介紹

Django Channels 是 Django 的一個延伸套件,它使開發人員能夠輕鬆構建即時應用程式。在這篇指南中,將解釋如何下載 Channels 並設定 Django 使其運行順暢。

Channels 的下載與設定

1. 下載 Channels

poetry add channels["daphne"]

daphne 是 Channels 預設的 ASGI server,可以自行更換成其他。(例如 Uvicorn, Hypercorn)。

詳細可以參閱說明:https://channels.readthedocs.io/en/latest/

2. settings.py 的設定

首先在 Installed_apps 加上 daphne,謹記一定要在 django.contrib.staticfiles 前。或是像是官方建議一樣,直接放在最前面就好。

INSTALLED_APPS = [
    # 👇 加在這裡
    "daphne",
    
    'django.contrib.admin',
    # ....
    # ...
    # ..
    # .
    'myapp',
]

接著寫下 ASGI_APPLICATION

ASGI_APPLICATION = 'myproject.asgi.application'
#WSGI_APPLICATION = 'myproject.wsgi.application'

接著設定 Channel Layer

CHANNEL_LAYERS = {
    'default': {
        'BACKEND': "channels.layers.InMemoryChannelLayer"
    }
}

當你在 CHANNEL_LAYERS 設置中定義 'BACKEND': "channels.layers.InMemoryChannelLayer" 並放在 'default' 下時,表示你使用的是 Django Channels 提供的內存通道層,這通常用於開發環境。

在正式環境中,通常會使用更可靠的通道層後端,比如 Redis 或 RabbitMQ。這些工具能夠更好地處理大量的並發連接與消息傳遞。

這些設置更改是為了將 Django Channels 融合到 Django 中,從而通過 WebSocket 連接實現即時通訊的功能。

討論

Channels 和 Daphne

很嚴格來說, Channels 並不是一個 Django 應用,而是一個拿來製造 Django 應用的框架。這也是為什麼我們不用在 Installed_app 中放入 Channels。但在後續的設定中,許多檔案都會引用 Channels 提供的函式與型別。

而 Daphne 作為 ASGI server 並不綁定於 Channels,只要想要實現非同步交流的 Python project 都可以使用它。

Channel layers

很嚴格來說,Channels 是不需要 Channel Layers 也可以用得,只不過功能會侷限很多。因為 Channel Layers 著重在實現不同服務之間通信的機制,假如只需要伺服器與一個客戶端的連結,的確用不到。不過這種狀況比較少見,因為用上了 Websocket 通訊機制時,多數強調不同消費者 (consumer) 之間的互動。

Channel Layers 有以下幾個好處:

  1. 消息傳遞 (Message Passing)
    Channel Layer 允許不同的消費者(consumers)之間傳遞消息。這對於像聊天室、即時通知這類需要多個用戶即時互動的應用非常有用。當一個用戶發送消息時,它可以通過 Channel Layer 傳遞給其他消費者。

  2. 群組管理 (Group Management)
    Channel Layer 可將多個消費者組成一個群組,並將消息廣播到整個群組。這對於通知所有用戶或一組特定用戶非常有幫助,例如向聊天室中的所有用戶發送消息,或給訂閱某個頻道的用戶發送通知。

  3. 支援多節點 (Multi-node Support)
    Channel Layer 還可以跨多個服務器實例工作,這意味著它支持分佈式應用程式的通訊。因此,無論應用程式運行在單個還是多個節點上,Channel Layer 都能夠有效管理和傳遞消息。


上一篇
N+1 問題
系列文
學習網頁開發13
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言